головне меню список тем тестування презентації історія створення

 

5.2. Мікроконтролери підгрупи PIC16F8X

5.2.1. Основні характеристики

Мікроконтролери підгрупи PIC16F8X відносяться до сімейства 8-розрядних КМОП мікроконтролерів групи PIC16CXXX, для яких характерні низька вартість, повністю статична КМОП-технологія і висока продуктивність.
До складу підгрупи входять МК PIC16F83, PIC16CR83, PIC16F84 і PIC16CR84. Основні характеристики МК підгрупи PIC16F8X приведені в табл. 5.1.
Всі мікроконтролери підгрупи PIC16F8X використовують гарвардську архітектуру з RISC-процесором, що володіє наступними основними особливостями:

  • використовуються тільки 35 простих команд;
  • всі команди виконуються за один цикл (400 нс при частоті 10 Мгц), окрім команд переходу, які вимагають 2 циклів;
  • робоча частота 0 Гц ... 10 Мгц;
  • роздільні шини даних (8 біт) і команд (14 біт);
  • 512 х 14 або 1024 х 14 пам'ять програм, виконана на ПЗП або електрично перепрограмованій Flash- пам'яті;
  • 15 восьмирозрядних регістрів спеціальних функцій (SFR);
  • восьмирівневий апаратний стек;
  • пряма, непряма і відносна адресація даних і команд;
  • 36 або 68 восьмирозрядних регістрів загального призначення (GPR) або ОЗП;
  • чотири джерела переривання:
  • зовнішній вхід RB0/INT;
  • переповнювання таймера  TMR0;
  • зміна сигналів на лініях порту  B;
  • завершення запису даних в пам'ять EEPROM;
  • 64 x 8 електрично перепрограмована EEPROM пам'ять даних з можливістю виконання 1000000 циклів стирання/запису;
  • збереження даних в EEPROM протягом  як мінімум 40 років.

Таблиця 5.1. Основні характеристики МК підгрупи PIC16F8X.          


Параметр

PIC16F83

PIC16CR83

PIC16F84

PIC16CR84

Максимальна частота, Мгц

10

10

10

10

Flash-пам'ять програм, слів

512

-

1K

-

ПЗП програм, слів

-

512

-

1K

Пам'ять даних, байт

36

36

68

68

Пам'ять даних в РПЗП (EEPROM), байт

64

64

64

64

Таймери

 TMR0

TMR0

TMR0

TMR0

Число джерел переривань

4

4

4

4

Число ліній вводу/виводу

13

13

13

13

Діапазон напруг живлення, В

2,0 - 6,0

2,0 - 6,0

2,0 - 6,0

2,0 - 6,0

Число виводів і тип корпусу

18 DIP, SOIC

18 DIP, SOIC

18 DIP, SOIC

18 DIP, SOIC

                                              
Мікроконтролери підгрупи PIC16F8X володіють розвиненими можливостями вводу/виводу:

  • 13 ліній вводу/виводу з індивідуальною установкою напряму обміну;
  • високий вхідний/вихідний струм, достатній для управління світлодіодами:
  • максимальний вхідний струм - 25 мА;
  • максимальний вихідний струм - 20 мА;
  • 8-бітовий таймер/лічильник TMR0 з 8-бітовим програмованим попереднім дільником.

Спеціалізовані мікроконтролерні функції включають наступні можливості:

  • автоматичне скидання при включенні (Power-on-Reset);
  • таймер включення при скиданні (Power-up Timer);
  • таймер запуску генератора (Oscillator Start-up Timer);
  • сторожовий (Watchdog) таймер  WDT з власним вбудованим генератором, що забезпечує підвищену надійність;
  • EEPROM біт секретності для захисту коду;
  • економічний режим SLEEP;
  • вибирані користувачем біти для установки режиму збудження вбудованого генератора;
  • послідовний вбудований пристрій програмування Flash/EEPROM пам'яті програм і даних з використанням тільки двох виводів.
  • КМОП технологія забезпечує МК підгрупи PIC16F8X додаткові переваги:
  • статичний принцип роботи;
  • широкий діапазон напруг живлення: 2,0 ... 6,0 В;
  • низьке енергоспоживання:
  • менше 2 мА при 5В і 4МГц;
  • порядка 15 мкА при 2В і 32КГц;
  • менше 1 мкА для SLEEP-режиму при 2В.
Мікроконтролери підгрупи PIC16F8X розрізняються між собою тільки об'ємом ОЗП даних, а також об'ємом і типом пам'яті програм. Наявність у складі підгрупи МК з Flash-пам'яттю програм полегшує створення і відладку прототипів промислових зразків виробів.

5.2.2. Особливості архітектури

Спрощена структурна схема МК підгрупи PIC16F8X приведена на мал. 5.1 .


Мал. 5.1. Структурна схема МК підгрупи PIC16F8X.

Архітектура заснована на концепції роздільних шин і областей пам'яті для даних і для команд (гарвардська архітектура). Шина даних і пам'ять даних (ОЗП) - мають ширину 8 біт, а програмна шина і програмна пам'ять (ПЗП) мають ширину 14 біт. Така концепція забезпечує просту, але потужну систему команд, розроблену так, що бітові, байтові і регістрові операції працюють з високою швидкістю і з перекриттям за часом вибірок команд і циклів виконання. 14-бітова ширина програмної пам'яті забезпечує вибірку 14-бітової команди в один цикл. Двохступінчатий конвейєр забезпечує одночасну вибірку і виконання команди. Всі команди виконуються за один цикл, виключаючи команди переходів.
Мікроконтролери PIC16F83 і PIC16CR83 адресують 512х14 пам'яті програм, а PIC16F84 і PIC16CR84 - 1Кх14 пам'яті програм. Вся пам'ять програм є внутрішньою.
Мікроконтролер може прямо або побічно звертатися до регістрів або пам'яті даних. Всі регістри спеціальних функцій, включаючи лічильник команд, відображаються на спомин даних. Ортогональна (симетрична) система команд дозволяє виконувати будь-яку команду над будь-яким регістром з використанням довільного методу адресації. Ортогональна архітектура і відсутність спеціальних виключень робить програмування МК групи PIC16F8X простим і ефективним.
Призначення виводів МК підгрупи PIC16F8X приведено в табл. 5.2.

Таблиця 5.2. Призначення виводів  МК підгрупи PIC16F8X.            


Позначення

Тип

Буфер

Опис

OSC1/CL

І

ТШ/КМОП

Вхід кристала генератора, RC-ланцюги або вхід зовнішнього тактового сигналу

OSC2/CLKOUT

О

-

Вихід кристала генератора. В RC-режимі - вихід 1/4 частоти OSC1

/MCLR

I/P

ТШ

Сигнал скиду/вхід програмуючої напруги. Скидання низьким рівнем.   

RA0

I/O

ТТЛ

PORT A -двонаправлений порт вводу/виводу RA4/T0CKI може бути вибраний як тактовий вхід таймера/лічильника TMR0. Вихід з відкритим стоком.

RA1

I/O

ТТЛ

RA2

I/O

ТТЛ

RA3

I/O

ТТЛ

RA4/T0CKI

I/O

ТШ

RB0/INT

I/O

ТТЛ/ТШ

PORT B - двонаправлений порт вводу/виводу. Може бути запрограмований в режимі внутрішніх активних навантажень на лінію живлення по всіх виводах. Вивід RB0/INT може бути вибраний як зовнішній вхід переривання. Виводи RB4...RB7 можуть бути програмно набудовані як входи переривання по зміні стану на будь-який з входів. При програмуванні МК RB6 використовується як тактовий, а RB7 як вхід/вихід даних.         

RB2

I/O

ТТЛ

RB3

I/O

ТТЛ

RB4

I/O

ТТЛ

RB5

I/O

ТТЛ

RB6

I/O

ТТЛ

RB7

I/O

ТТЛ/ТШ

RB8

I/O

ТТЛ/ТШ

Vdd

P

-

Позитивний полюс  напруги живлення

Vss

P

-

Загальний дріт (земля)

В таблиці використані наступні позначення: I - вхід; ОUT - вихід; I/O - вхід/вихід; P - живлення; - - не використовується; ТТЛ - ТТЛ вхід; ТШ - вхід трігера Шмітта.                                     
Мікроконтролер містить 8-розрядне АЛП і робочий регістр  W. АЛП є арифметичним модулем загального призначення і виконує арифметичні і логічні функції над вмістом робочого регістра і будь-якого з регістрів контролера. АЛП може виконувати операції додавання, віднімання, зсуву і логічні операції. Якщо не вказане інше, то арифметичні операції виконуються в додатковому двійковому коді.
Залежно від результату операції, АЛП може змінювати значення бітів регістра  STATUS: С (Carry), DC (Digit carry) і Z (Zero).

5.2.3. Схема тактування і цикл виконання команди

Вхідна тактова частота, що поступає з виводу  OSC1/CLKIN, ділиться всередині на чотири, і з неї формуються чотири циклічні тактові послідовності Q1, Q2, Q3 і Q4, що не перекриваються. Лічильник команд збільшується в такті Q1, команда прочитується з пам'яті програми і запам”ятовується в регістрі команд в такті Q4. Команда декодується і виконується протягом подальшого циклу в тактах Q1...Q4. Схема тактування і виконання команди зображена на мал. 5.2 .
Цикл виконання команди складається з чотирьох тактів: Q1...Q4. Вибірка команди і її виконання суміщені за часом таким чином, що вибірка команди займає один цикл, а виконання - наступний цикл. Ефективний час виконання команди складає один цикл. Якщо команда змінює лічильник команд (наприклад, команда GOTO), то для її виконання буде потрібно два цикли, як показано на мал. 5.3 .



Мал. 5.2. Схема тактування і виконання команди.


Мал. 5.3. Вибірка команд.

Цикл вибірки починається із збільшення лічильника команд в такті Q1. В циклі виконання команди вибрана команда запам”ятовується в регістр команд в такті Q1. Протягом тактів Q2, Q3 і Q4 відбувається декодування і виконання команди. В такті Q2 прочитується пам'ять даних (читання операнда), а запис відбувається в такті Q4.

5.2.4. Організація пам'яті програм і стека

Лічильник команд в МК PIC16F8Х має ширину 13 біт і здатний адресувати 8Кх14біт об'єму програмної пам'яті. Проте фізично на кристалах PIC16F83 і PIC16CR83 є тільки 512х14 пам'яті (адреси 0000h-01FFh), а в МК PIC16F84 і PIC16CR84 - 1Кх14 пам'яті (адреси 0000h-03FFh). Звернення до адрес вище 1FFh (3FFh) фактично є адресація на ті ж перші 512 адрес (перші 1К адрес).
Організація пам'яті програм і стека приведена на мал. 5.4.
В пам'яті програм є виділені адреси. Вектор скидання знаходиться за адресою 0000h, вектор переривання - за адресою 0004h. Звичайно за адресою 0004h розташовується підпрограма ідентифікації і обробки переривань, а за адресою 0000h - команда переходу на мітку, розташовану за підпрограмою обробки переривань.



Мал. 5.4. Організація пам'яті програм і стека.

5.2.5. Організація пам'яті даних

Пам'ять даних МК розбита на дві області. Перші 12 адрес - це область регістрів спеціальних функцій (SFR), а друга - область регістрів загального призначення (GPR). Область SFR управляє роботою приладу.
Обидві області розбито у свою чергу на банки 0 і 1. Банк 0 вибирається обнуленням біта RP0  регістра статусу (STATUS). Установка біта RP0 в одиницю вибирає банк 1. Кожний банк має довжину 128 байт. Проте для PIC16F83 і PIC16CR83 пам'ять даних існує тільки до адреси 02Fh, а для PIC16F84 і PIC16CR84 - до адреси 04Fh.
На мал. 5.5 зображена організація пам'яті даних.




Мал. 5.5. Організація пам'яті даних.

Деякі регістри спеціального призначення продубльовані в обох банках, а деякі розташовані в банку 1 окремо.
Регістри з адресами 0Ch-4Fh можуть використовуватися як регістри загального призначення, які є статичним ОЗП. Адреси регістрів загального призначення банку 1 відображаються на банк 0. Отже, коли встановлений банк 1, те звернення до адрес 8Ch-CFh фактично адресує банк 0.
В регістрі статусу крім біта RP0 є ще біт RB1, що дозволяє звертатися до чотирьох сторінок (банків) майбутніх модифікацій цього кристала.
До комірок ОЗП можна адресуватися прямо, використовуючи абсолютну адресу кожного регістра, або побічно, через регістр покажчик FSR. Непряма адресація використовує поточне значення розрядів RP1:RP0 для доступу до банків. Це відноситься і до EEPROM пам'яті даних. В обох випадках можна адресувати до 512 регістрів.

5.2.6. Регістри спеціального призначення

Регістр статусу (STATUS) містить ознаки операції (арифметичні прапори) АЛП, стан контролера при скиданні і біти вибору сторінок для пам'яті даних. Призначення біт регістра приведено в табл. 5.3.
Таблиця 5.3. Призначення біт регістра STATUS (адреса 03h, 83h).   


R/W-0

R/W-0

R/W-0

R-1

R-1

R/W-x

R/W-x

R/W-x

IRP

RP1

RP0

/TO

/PD

Z

DC

 С

Біт 7

Біт 6

Біт 5

Біт 4

Біт 3

Біт 2

Біт 1

Біт 0

Біт 7: IRP: біт вибору сторінки банку даних (використовується при непрямій адресації)
0 = банк 0,1 (00h - FFh)
1 = банк 2,3 (100h - 1FFh)
Біт IRP не використовується в МК підгрупи PIC16F8X

Біти 6-5: RP1:RP0: біти вибору сторінки банку даних (використовуються при прямій адресації)
00 = банк 0 (00h - 7Fh)
01 = банк 1 (80h - FFh)
10 = банк 2 (100h - 17Fh)
11 = банк 3 (180h - 1FFh)
В МК підгрупи PIC16F8X використовується тільки біт RP0

Біт 4: /TO: біт спрацьовування сторожового таймера 
1 = після включення живлення, а також командами CLRWDT і SLEEP 
0 = після закінчення витримки сторожового таймера

Біт 3: /PD: біт зниження споживаної потужності
1 = після включення живлення, а також командою CLRWDT 
0 = по команді SLEEP

Біт 2: Z: біт нульового результату
1 = результат арифметичної або логічної операції нульової
0 = результат арифметичної або логічної операції ненульовий

Біт 1: DC: Біт десяткового переносу/займу (для команд ADDWF і ADDLW)
1 = має місце перенесення з 4-го розряду
0 = немає перенесення з 4-го розряду

Біт 0: С: Біт переносу/займу (для команд ADDWF і ADDLW)
1 = має місце перенесення з самого старшого розряду
0 = немає перенесення з самого старшого розряду
Примітка: віднімання здійснюється шляхом надбавки додаткового коду другого операнда. При виконанні команд зсуву цей біт завантажується з молодшого або старшого розряду зсовуваного джерела.

Тут і далі: R - читаний біт; W - записуваний біт; S - встановлюваний біт; U - невживаний біт (читається як «0»); -n = 0 або 1 - значення біта після скидання.

 

Регістр статусу доступний для будь-якої команди так само, як будь-який інший регістр. Проте якщо регістр  STATUS є регістром призначення для команди, що впливає на біти Z, DC або С, то запис в ці три біти забороняється. Крім того, біти /TO і /PD встановлюються апаратний і не можуть бути записані в статус програмно. Це слід мати на увазі при виконанні команди з використанням регістра статусу. Наприклад, команда CLRF STATUS обнулить всі біти, окрім бітів /TO і /PD, а потім встановить біт Z=1. Після виконання цієї команди регістр статусу може і не мати нульового значення (через біти /TO і /PD) STATUS=000uu1uu, де u - незмінний стан. Тому рекомендується для зміни регістра статусу використовувати тільки команди бітової установки BCF, BSF, MOVWF, які не змінюють решту біт статусу. Дія всіх команд на біти статусу розглядається в розділі «Опис системи команд».
Регістр конфігурації (OPTION) є доступним по читанню і запису регістром, який містить управляючі біти для конфігурації попереднього дільника, зовнішніх переривань, таймера, а також резисторів «pull-up» (резисторів навантаження що подають напругу живлення до виходів мікросхеми  що працюють за принципом відкритого колектора) на виводах PORTB. Призначення біт регістра приведено в табл. 5.4
Таблиця 5.4. Призначення біт регістра OPTION (адреса 81h).            


R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

/RBPU

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0

Біт 7

Біт 6

Біт 5

Біт 4

Біт 3

Біт 2

Біт 1

Біт 0

Біт 7: /RBPU: біт установки резисторів «pull-up» на виводах PORTB 
0 = резистори «pull-up» підключені
1 = резистори «pull-up» відключені

Біт 6: INTEDG: біт вибору переходу сигналу переривання 
0 = переривання по спаду сигналу на виводу RB0/INT 
1 = переривання по фронту сигналу на виводу RB0/INT

Біт 5: T0CS: біт вибору джерела сигналу таймера  TMR0 
0 = внутрішній тактовий сигнал (CLKOUT)
1 = перехід на виводу RA4/T0CKI

Біт 4: T0SE: біт вибору переходу джерела сигналу для TMR0 
0 = приріст по фронту сигналу на виводу RA4/T0CKI 
1 = приріст по спаду сигналу на виводу RA4/T0CKI

Біт 3: PSA: біт призначення попереднього подільника
0 = попередній подільник підключений до TMR0 
1 = попередній подільник підключений до сторожового таймера  WDT

біти 2-0: PS2:PS0: біти вибору коефіцієнта розподілу попереднього подільника

Значення біт

Швидкість TMR0

Швидкість WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011

1:16

1:8

100

1:32

1:16

101

1:64

1:32

110

1:128

1:64

111

1:256

1:128

У тому випадку, коли попередній подільник обслуговує сторожовий таймер  WDT, таймеру  TMR0 призначається коефіцієнт попереднього поділу 1:1.
Регістр умов переривання (INTCON) є доступним по читанню і запису регістром, який містить біти доступу для всіх джерел переривань. Призначення біт регістра приведено в табл. 5.5 .
Таблиця 5.5. Призначення біт регістра INTCON (адреси 0Bh, 8Bh). 


R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-x

GIE

 EEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

Біт 7

Біт 6

Біт 5

Біт 4

Біт 3

Біт 2

Біт 1

Біт 0

Біт 7: GIE: біт дозволу всіх переривань 
0 = заборонені всі переривання 
1 = дозволені всі незамасковані переривання

Біт 6: EEIE: біт дозволу переривання запису в EEPROM 
0 = заборонені переривання запису в EEPROM 
1 = дозволені переривання запису в EEPROM

Біт 5: T0IE: біт дозволу переривання по переповнюванню TMR0 
0 = заборонені переривання від TMR0 
1 = дозволені переривання від TMR0

Біт 4: INTE: біт дозволу переривань по входу RB0/INT 
0 = заборонені переривання по входу RB0/INT 
1 = дозволені переривання по входу RB0/INT

Біт 3: RBIE: біт дозволу переривань по зміні PORTB 
0 = заборонені переривання по зміні PORTB 
1 = дозволені переривання по зміні PORTB

Біт 2: T0IF: біт запиту переривання по переповнюванню TMR0 
0 = переривання по переповнюванню  TMR0 відсутнє
1 = переривання по переповнюванню  TMR0 має місце

Біт 1: INTF: біт запиту переривання по входу RB0/INT 
0 = переривання по входу RB0/INT відсутнє
1 = переривання по входу RB0/INT має місце

Біт 0: RBTF: біт запиту переривання по зміні PORTB 
0 = ні на одному з входів RB7:RB4 стан не змінився
1 = хоча б на одному з входів RB7:RB4 змінився стан

Біт дозволу всіх переривань  GIE скидається автоматично при наступних обставинах:

  • по включенню живлення;
  • по зовнішньому сигналу /MCLR при нормальній роботі;
  • по зовнішньому сигналу /MCLR в режимі SLEEP;
  • по закінченню затримки таймера  WDT при нормальній роботі;
  • по закінченню затримки таймера  WDT в режимі SLEEP.

Переривання  INT може вивести процесор з режиму SLEEP, якщо перед входом в цей режим біт INTE був встановлений в одиницю. Стан біта GIE також визначає: чи процесор переходитиме на підпрограму переривання після виходу з режиму SLEEP.

Скидання бітів - запитів переривань - повинен здійснюватися відповідною програмою обробки.

5.2.7. Лічильник команд

Лічильник команд PCL і PCLATH має розрядність 13 біт. Молодший байт лічильника (PCL) доступний для читання і запису і знаходиться в регістрі  02h. Старший байт лічильника команд не може бути напряму записаний або лічений і береться з регістра  PCLATH (PC latch high), адреса якого 0Ah. Вміст PCLATH передається в старшому байті лічильника команд, коли він завантажується новим значенням.
Залежно від того, чи завантажується в лічильник команд нове значення під час виконання команд CALL, GOTO, або в молодший байт лічильника команд (PCL) проводиться запис, - старші біти лічильника команд завантажуються з PCLATH різними способами, як показано на мал. 5.6



Мал. 5.6. Завантаження старших біт лічильника команд.

Команди CALL і GOTO оперують 11-розрядним адресним діапазоном, достатнім для зсуву в межах сторінки програмної пам'яті об'ємом 2К слів. Для МК підгрупи PIC16F8X цього вистачає. З метою забезпечення можливості розширення пам'яті команд для майбутніх моделей МК передбачено завантаження двох старших біт лічильника команд з регістра  PCLATH<4:3>. При використовуванні команд CALL і GOTO користувач повинен переконатися в тому, що ці сторінкові біти запрограмовані для виходу на потрібну сторінку. При виконанні команди CALL або виконанні переривання весь 13-бітовий лічильник команд поміщається в стек, тому для повернення з підпрограми не потрібні маніпуляції з розрядами PCLATH<4:3>.
Мікроконтролери підгрупи PIC16F8X ігнорують значення біт PCLATH<4:3>, які використовуються для звернення до сторінок 1, 2 і 3 програмної пам'яті. Проте застосовувати біти PCLATH<4:3> як елементи пам'яті загального призначення не рекомендується, оскільки це може вплинути на сумісність з майбутніми поколіннями виробів.
Можливість виконувати арифметичні операції безпосередньо над лічильником команд дозволяє дуже швидко і ефективно здійснювати табличні перетворення в PIC-контроллерах.
Мікроконтролери підгрупи PIC16F8X мають восьмирівневий апаратний стек шириною 13 біт (див. мал. 5.4). Область стека не належить ні до програмної області, ні до області даних, а покажчик стека користувачу недоступний. Поточне значення лічильника команд посилається в стек, коли виконується команда CALL або проводиться обробка переривання. При виконанні процедури повернення з підпрограми (команди RETLW, RETFIE або RETURN) вміст лічильника команд відновлюється із стека. Регістр  PCLATH при операціях із стеком не змінюється.
Стек працює як циклічний буфер. Отже, після того, як стек був завантажений 8 разів, дев'яте завантаження перепише значення першого. Десяте завантаження перепише друге і т.д. Якщо стек був вивантажений 9 разів, лічильник команд стає таким же, як після першого вивантаження.
Ознак положення стека в контроллрі не передбачено, тому користувач повинен самостійно стежити за рівнем вкладення підпрограм.


5.2.8. Пряма і непряма адресації

Коли проводиться пряма 9-бітова адресація, молодші 7 біт беруться як пряма адреса з коду операції, а два біти покажчика сторінок (RP1, RP0) з регістра статусу, як показано на мал. 5.7.



Мал. 5.7. Методи адресації даних.

Ознакою непрямої адресації є звернення до регістра  INDF. Будь-яка команда, яка використовує INDF (адреса 00h) як регістр фактично звертається до покажчика, який зберігається в FSR (адреса 04h). Читання непрямим чином самого регістра  INDF дасть результат 00h. Запис в регістр  INDF непрямим чином виглядатиме як NOP, але біти статусу можуть бути змінені. Необхідна 9-бітова адреса формується об'єднанням вмісту 8-бітового FSR  регістра і біта IRP з регістра статусу (див. мал. 5.7).

Зверніть увагу, що деякі регістри спеціальних функцій розташовуються в банку 1. Щоб адресуватися до них, потрібно додатково встановити в одиницю біт RP0 в регістрі статусу.

5.2.9. Порти вводу/виводу

Контролери підгрупи PIC16F8X мають два порти: PORTA (5 біт) і PORTB (8 біт) з побітовою індивідуальною настройкою на введення або на ввиведеня.
Порт  А (PORTA) є 5-бітовим фіксатором, відповідним виводам контролера RA<4:0>. Лінія RA4 має вхід трігера Шмітта і вихід з відкритим колектором. Вся решта ліній порту має ТТЛ вхідні рівні і КМОП вихідні буфери. Адреса регістра порту  А - 05h.
Кожній лінії порту поставлений у відповідність біт напряму передачі даних, який зберігається в управляючому регістрі  TRISA, розташованому за адресою 85h. Якщо біт управляючого TRISA  регістра має значення 1, то відповідна лінія встановлюватиметься на введення. Нуль перемикає лінію на вивід і одночасно виводить на неї вміст відповідного регістра-фіксатора порту. При включенні живлення всі лінії порту за умовчанням налаштовані на введення.
На мал. 5.8  дана схема ліній RA<3:0>  порту  А.




Мал. 5.8. Схема ліній RA <3:0> порту А. Виводи порту мають захисні діоди до Vdd і Vss.

Операція читання порту  А прочитує стан виводів порту, тоді як запис в нього змінює стан трігерів порту. Всі операції з портом є операціями типу «читання-модиіфкація-запис». Тому запис в порт припускає, що стан виводів порту спочатку прочитується, потім модифікується і записується в трігер-фіксатор. Вивід RA4 мультиплексований з тактовим входом таймера  TMR0. Схема лінії RA4  порту  А приведена на мал. 5.9.
Порт  В (PORTB) - це двонаправлений 8-бітовий порт, відповідний виводам RB<7:0> контролера і розташований за адресою 06h. Той, що відноситься, до порту В управляючий регістр  TRISB розташований на першій сторінці регістрів за адресою 86h. Якщо біт управляючого TRISB  регістра має значення 1, то відповідна лінія встановлюватиметься на ввід. Нуль перемикає лінію на вивід і одночасно виводить на неї вміст відповідного регістра. При включенні живлення всі лінії порту за умовчанням налаштовані на ввід.




Мал. 5.9. Схема лінії RA4 порту А. Вивід порту має захисний діод тільки до Vss.

У кожної ніжки порту  В є невелике активне навантаження (біля 100мкА) на лінію живлення (pull-up). Вона автоматично відключається, якщо ця ніжка запрограмована як вивід. Більш того, управляючий біт /RBPU  регістра  OPTION<7> може відключити (при RBPU=1) всі навантаження. Скидання при включенні живлення також відключає всі навантаження.
Чотири лінії порту  В (RB<7:4>) можуть викликати переривання при зміні значення сигналу на будь-якій з них. Якщо ці лінії налаштовані на введення, то вони опитуються і встановлюються в циклі читання Q1. Нова величина вхідного сигналу порівнюється із старою в кожному командному циклі. При неспівпаданні значення сигналу на ніжці і у фіксаторі генерується високий рівень. Виходи детекторів «неспівпадань» RB4, RB5, RB6, RB7 об'єднуються по АБО і генерують переривання  RBIF (що запам'ятовується в регістрі  INTCON<0>). Будь-яка лінія, набудована як висновок, в цьому порівнянні не бере участь. Переривання може вивести кристал з режиму SLEEP. В підпрограмі обробки переривання слід скинути запит переривання одним з наступних способів:

  • прочитати (або записати в) порт  В. Это завершить стан порівняння;
  • обнулити біт RBIF  регістра  INTCON<0>.

При цьому необхідно мати на увазі, що умова «неспівпадання» продовжуватиме встановлювати ознаку RBIF. Тільки читання порту  В може усунути «неспівпадання» і дозволить обнулити біт RBIF.
Переривання по неспівпаданню і програмно встановлювані внутрішні активні навантаження на цих чотирьох лініях можуть забезпечити простий інтерфейс, наприклад, з клавіатурою, з виходом з режиму SLEEP по натисненню клавіш.
Схеми ліній порту  B приведені на мал. 5.10 і 5.11.

 

 



Мал. 5.10. Схема ліній RB <7:4> порту B. Виводи порту мають захисні діоди до Vdd і Vss.


Мал. 5.11. Схема ліній RB <3:0> порту B. Виводи порту мають захисні діоди до Vdd і Vss.

При організації двонаправлених портів необхідно враховувати особливості організації вводу/виводу даних МК. Будь-яка команда, яка здійснює запис, виконує її всередині як «читання-модифікація-запис». Наприклад, команди BCF і BSF прочитують порт цілком, модифікують один біт і виводять результат назад. Тут необхідна обережність. Зокрема, команда BSF PORTB, 5 (встановити в одиницю біт 5 порту  B) спочатку прочитує всі реальні значення сигналів, присутні в даний момент на виводах порту. Потім виконуються дії над бітом 5, і нове значення байта цілком записується у вихідні фіксатори. Якщо інший біт регістра  PORTB використовується як двонаправлений ввід/вивід, і в даний момент він визначений як вхідний, то вхідний сигнал на цьому виводу буде лічений і записаний назад у вихідний трігер-фіксатор цього ж виводу, стираючи попередній стан. До тих пір, поки ця ніжка залишається в режимі введення, жодних проблем не виникає. Проте якщо пізніше лінія 0 перемкнеться в режим виводу, її стан буде невизначеним.
На ніжку, що працює в режимі виводу, не повинні навантажуватися зовнішні джерела струмів («монтажне І», «монтажне АБО»). Великі результуючі струми можуть пошкодити кристал.
Необхідно витримувати певну послідовність звернення до портів вводу/виводу. Запис в порт виводу відбувається в кінці командного циклу. Але при читанні дані повинні бути стабільні на початку командного циклу. Будьте уважні в операціях читання, що йдуть відразу за записом в той же порт. Тут треба враховувати інерційність встановлення напруги на виводах. Може бути потрібно програмна затримка, щоб напруга на ніжці (яка залежить від навантаження) встигла стабілізуватися до початку виконання наступної команди читання.

5.2.10. Модуль таймера і регістр таймера

Структура модуля таймера/лічильника TIMER0 і його взаємозв'язок з регістрами  TMR0 і OPTION показані на мал. 5.12. TIMER0 є програмованим модулем і містить наступні компоненти:

  • 8-розрядний таймер/лічильник TMR0 з можливістю читання і запису як регістр;
  • 8-розрядний програмно керований попередній дільник;
  • мультиплексор вхідного сигналу для вибору внутрішнього або зовнішнього тактового сигналу;
  • схему вибору фронту зовнішнього тактового сигналу;
  • формувач запиту переривання по переповнюванню регістра TMR0 з FFh до 00h.

Режим таймера вибирається шляхом скидання в нуль біта T0CS  регістра  OPTION <5>. В режимі таймера  TMR0 інкрементується кожний командний цикл (без попереднього подільника). Після запису інформації в TMR0 інкрементування його почнеться після двох командних циклів. Це відбувається зі всіма командами, які проводять запис або читання-модифікацію-запис TMR0 (наприклад, MOVF TMR0, CLRF TMR0). Уникнути цього можна за допомогою запису в TMR0 скоректованого значення. Якщо TMR0 потрібно перевірити на рівність нулю без зупинки рахунку, слід використовувати інструкцію MOVF TMR0,W.
Режим лічильника вибирається шляхом установки в одиницю біта T0CS  регістра  OPTION<5>. В цьому режимі регістр  TMR0 буде інкрементуватися або наростаючим, або спадаючим фронтом на виводі RA4/T0CKI від зовнішніх подій. Напрям фронту визначається управляючим бітом T0SE в регістрі  OPTION<4>. При T0SE = 0 буде вибраний наростаючий фронт.
Попередній подільник може використовуватися або спільно з TMR0, або із сторожовим (Watchdog) таймером. Варіант підключення дільника контролюється бітом PSA регістра  OPTION<3>. При PSA=0 дільник буде приєднаний до TMR0. Вміст дільника програмі неприступний. Коефіцієнт розподілу попереднього подільника програмується бітами PS2.PS0  регістра  OPTION<2:0>.




Мал. 5.12. Структурна схема таймера/лічильника TMR0.

Переривання по TMR0 виробляється тоді, коли відбувається переповнювання регістра  таймера/лічильника при переході від FFh до 00h. Тоді встановлюється біт запиту T0IF в регістрі  INTCON<2>. Дане переривання можна замаскувати бітом T0IE в регістрі  INTCON<5>. Біт запиту T0IF повинен бути скинений програмно при обробці переривання. Переривання по TMR0 не може вивести процесор з режиму SLEEP тому, що таймер в цьому режимі не функціонує.
При PSA=1 дільник буде приєднаний до сторожового таймера як постдільник (дільник на виході). Можливі варіанти використовування попереднього подільника показані на мал. 5.13.
При використовуванні попереднього подільника сумісного з TMR0, всі команди, що змінюють вміст TMR0, обнуляють попередній подільник. Якщо попередній подільник використовується спільно з WDT, команда CLRWDT обнуляє вміст попереднього подільника разом з WDT.
При використовуванні модуля TIMER0 в режимі лічильника зовнішніх подій необхідно враховувати те, що зовнішній тактовий сигнал синхронізується внутрішньою частотою Fosc. Це приводить до появи затримки в часі фактичного інкрементування вмісту TMR0.
Синхронізація відбувається після закінчення 2-го і 4-го тактів роботи МК, тому, якщо попередній подільник не використовується, то для фіксації вхідної події необхідно, щоб тривалості високого і низького станів сигналу на вході RA4/T0CKI були б не менше 2 періодів тактової частоти Tosc плюс деяка затримка ( ~ 20 нс).
Якщо модуль TIMER0 використовується спільно з попереднім подільником, то частота вхідного сигналу ділиться асинхронним лічильником так, що сигнал на виході попереднього подільника стає симетричним. При цьому необхідно, щоб тривалості високого і низького рівнів сигналу на вході RA4/T0CKI були б не менше 10 нс. Синхронізація сигналу відбувається на виході попереднього подільника, тому існує невелика затримка між фронтом зовнішнього сигналу і часом фактичного інкремента таймера/лічильника. Ця затримка знаходиться в діапазоні від 3 до 7 періодів коливань тактового генератора. Таким чином, вимірювання інтервалу між подіями буде виконано з точністю ±4 · Tosc.



Мал. 5.13. Структура і можливі варіанти використовування попереднього подільника.

5.2.11. Пам'ять даних в РПЗУ (EEPROM)

Мікроконтролери підгрупи PIC6F8X мають енергонезалежну пам'ять даних 64х8 EEPROM біт, яка допускає запис і читання під час нормальної роботи (у всьому діапазоні живлячих напруг). Ця пам'ять не належить області регістрової пам'яті ОЗП. Доступ до неї здійснюється за допомогою непрямої адресації через регістри спеціальних функцій: EEDATA <08h>, який містить 8-бітові дані для читання/запису і EEADR <09h>, включаючий адресу комірки, до якого йде звертання. Для управління процесом читання/запису використовуються два регістри: EECON1 <88h> і EECON2 <89h>.
При записі байта автоматично стирається попереднє значення, і записуються нові дані (стирання перед записом). Всі ці операції проводить вбудований автомат запису EEPROM. Вміст елементів цієї пам'яті при виключенні живлення зберігається.
Регістр  EEADR може адресувати до 256 байт даних EEPROM. В МК підгрупи PIC6F8X використовуються тільки перші 64 байти, що адресуються шістьма молодшими бітами EEADR<5:0>. Проте старші два біти також декодуються. Тому ці два біти повинні бути встановлені в '0', щоб адреса потрапила в доступні 64 біти адресного простору.
Призначення біт регістра  EECON1 приведено в табл. 5.6.

Таблиця 5.6. Призначення біт регістра EECON1 (адреси 88h).            


U

U

U

R/W-0

R/W-x

R/W-0

R/S-0

R/S-x

-

-

-

EEIF

WRERR

WREN

WR

RD

Біт 7

Біт 6

Біт 5

Біт 4

Біт 3

Біт 2

Біт 1

Біт 0

Біти 7:5 не використовуються (читаються як '0')

Біт 4: EEIF: біт запиту переривання по запису в EEPROM  0 = операція запису не завершена або не починалася 1 = операція запису завершена (повинен бути скинений програмно)

Біт 3: WRERR: біт ознаки помилки запису в EEPROM  0 = операція запису завершена 1 = операція запису перервана передчасно (скиданням по /MCLR або скиданням від WDT)

Біт 2: WREN: біт дозволу запису в EEPROM  0 = заборонений запис в EEPROM  1 = дозволені цикли запису

Біт 1: WR: біт управління записом 0 = цикл запису даних в EEPROM завершений 1 = ініціює цикл запису (скидається апаратний після закінчення запису. Біт WR може бути тільки встановлений (але не скинений) програмно)

Біт 0: RD: біт управління читанням 0 = читання даних EEPROM не ініційовано 1 = ініціює читання даних EEPROM (читання займає один цикл. Біт RD скидається апаратний. Біт RD може бути тільки встановлений (але не скинений) програмно)

Регістр  EECON2 не є фізичним регістром. Він використовується виключно при організації запису даних в EEPROM. Читання регістра  EECON2 дає нулі.
При прочитуванні даних з пам'яті EEPROM необхідно записати потрібну адресу в EEADR  регістр і потім встановити біт RD EECON1<0> в одиницю. Дані з'являться в наступному командному циклі в регістрі  EEDATA і можуть бути прочитані. Дані в регістрі  EEDATA фіксуються.
При записі в пам'ять EEPROM необхідно спочатку записати адресу в EEADR-регістр і дані в EEDATA-регістр. Потім слід виконати спеціальну послідовність команд, що проводить безпосередній запис:
movlw 55h
movwf EECON2
movlw AAh
movwf EECON2
bsf EECON1,WR;установить WR біт, почати запис
Під час виконання цієї ділянки програми всі переривання повинні бути заборонені, для точного виконання тимчасової діаграми. Час запису - приблизно 10 мс. Фактичний час запису може змінюватися залежно від напруги, температури і індивідуальних властивостей кристала. В кінці запису біт WR автоматично обнуляється, а прапор завершення запису EEIF, він же запит на переривання, встановлюється.
Для запобігання випадкових записів в пам'ять даних передбачений спеціальний біт WREN в регістрі  EECON1. Рекомендується тримати біт WREN вимкненим, окрім тих випадків, коли потрібно відновити пам'ять даних. Більш того, кодові сегменти, які встановлюють біт WREN, і ті, які виконують запис, слід берегти на різних адресах, щоб уникнути випадкового виконання їх обох при збої програми.

5.2.12. Організація переривань

МК підгрупи PIC16F8X мають чотири джерела переривань:

  • зовнішнє переривання з виводу RB0/INT;
  • переривання від переповнювання лічильника/таймера   TMR0;
  • переривання від зміни сигналів на лініях порту  RB<7:4>;
  • переривання після закінчення запису даних в EEPROM.

Всі переривання мають один і той же вектор/адресу - 0004h. Проте в управляючому регістрі  переривань  INTCON відповідним бітом-ознакою записується, від якого саме джерела надійшов запит переривання. Виключення складає переривання після закінчення запису в EEPROM, ознака якого знаходиться в регістрі  EECON1.
Біт загального дозволу/заборони переривання  GIE (INTCON <7>) дозволяє (якщо = 1) всі індивідуально незамасковані переривання або забороняє їх (якщо = 0). Кожне переривання окремо може бути додаткове дозволене/заборонене установкою/скиданням відповідного біта в регістрі  INTCON.
Біт GIE при скиданні обнуляється. Коли починає оброблятися переривання, біт GIE обнуляється, щоб заборонити подальші переривання, адреса повернення посилається в стек, а в програмний лічильник завантажується адреса 0004h. Час реакції на переривання для зовнішніх подій, таких як переривання від ніжки INT або порту  B, складає приблизно п'ять циклів. Це на один цикл менше ніж для внутрішніх подій, таких як переривання по переповнюванню від таймера  TMR0. Час реакції завжди однаковий.
В підпрограмі обробки переривання джерело переривання може бути визначено по відповідному біту в регістрі ознак. Цей прапор-ознака повинен бути програмно скинений усередині підпрограми. Ознаки запитів переривань не залежать від відповідних маскуючих бітів і біта загального маскування GIE.
Команда повернення з переривання  RETFIE завершує перериваючу підпрограму і встановлює біт GIE, щоб знову дозволити переривання.
Логіка переривань контроллера зображена на мал. 5.14.



Мал. 5.14. Логіка переривань мікроконтролера.

Зовнішнє переривання на ніжці RB0/INT здійснюється по фронту: або по наростаючому (якщо в регістрі  OPTION біт INTEDG=1), або по спадаючому (якщо INTEDG=0). Коли фронт виявляється на ніжці INT, біт запиту INTF встановлюється в одиницю (INTCON <1>). Це переривання може бути замасковано скиданням управляючого біта INTE в нуль (INTCON <4>). Біт запиту INTF необхідно очистити перериваючою програмою перед тим, як знову дозволити це переривання. Переривання  INT може вивести процесор з режиму SLEEP, якщо перед входом в цей режим біт INTE був встановлений в одиницю. Стан біта GIE також визначає, чи процесор переходитиме на підпрограму переривання після виходу з режиму SLEEP.
Переповнювання лічильника TMR0 (FFh->00h) встановлює в одиницю біт запиту T0IF (INTCON<2>). Це переривання може бути дозволено/заборонено встановленням/скиданням біта маски T0IE (INTCON<5>). Скидання запиту T0IF - справа програми обробки.
Будь-яка зміна сигналу на одному з чотирьох входів порту  RB<7:4> встановлює в одиницю біт RBIF (INTCON<0>). Це переривання може бути дозволено/заборонено встановленням/скиданням біта маски RBIE (INTCON<3>). Скидання запиту RBIF - справа програми обробки.

Ознака запиту переривання після закінчення запису в EEPROM, EEIF (EECON1<4>) встановлюється в одиницю після закінчення автоматичного запису даних в EEPROM. Це переривання може бути замасковано скиданням біта EEIE (INTCON<6>). Скидання запиту EEIF - справа програми обробки.

5.2.13. Спеціальні функції

Мікроконтролери підгрупи PIC16F8X мають набір спеціальних функцій, призначених для розширення можливостей системи, мінімізації вартості, виключення навісних компонентів, забезпечення мінімального енергоспоживання і захисту коду від прочитування. В PIC16F8X реалізовані наступні спеціальні функції:

  • скидання;
  • сторожовий таймер (WDT);
  • режим зниженого енергоспоживання (SLEEP);
  • вибір типу генератора;
  • захист коду від прочитування;
  • біти ідентифікації;
  • послідовне програмування у складі схеми.

В PIC16F8X існують відмінності між варіантами скидань:

  • скидання по включенню живлення;
  • скидання по зовнішньому сигналу /MCLR при нормальній роботі;
  • скидання по зовнішньому сигналу /MCLR в режимі SLEEP;
  • скидання після закінчення затримки таймера WDT при нормальній роботі;
  • скидання після закінчення затримки таймера WDT в режимі SLEEP.

Для реалізації скидання по включенню живлення в МК підгрупи PIC16F8X передбачений вбудований детектор включення живлення. Таймер встановлення живлення (PWRT) починає відлік часу після того, як напруга живлення перетинає рівень близько 1,2.1,8 Вольт. Після закінчення витримки біля 72мс вважається, що напруга досягла номіналу і запускається інший таймер - таймер запуску генератора (OST), що формує витримку на стабілізацію кварцового генератора. Програмований біт конфігурації дозволяє дозволяти або забороняти витримку від вбудованого таймера встановлення живлення. Витримка запуску міняється залежно від варыантыв кристала, від живлення і температури. Таймер на стабілізацію генератора відлічує 1024 імпульси від генератора, що почав роботу. Вважається, що кварцовий генератор за цей час виходить на режим. При використовуванні RC  генераторів витримка на стабілізацію не проводиться.
Якщо сигнал /MCLR утримується в низькому стані достатньо довго (довше за час всіх затримок), тоді після переходу /MCLR у високий стан програма почне виконуватися негайно. Це необхідне в тих випадках, коли вимагається синхронно запустити в роботу декілька PIC-контролерів через загальний для всіх сигнал /MCLR.
Мікроконтролери підгрупи PIC16F8X мають вбудований сторожовий таймер  WDT. Для більшої надійності він працює від власного внутрішнього RC-генератора і продовжує функціонувати, навіть якщо основний генератор зупинений, як це буває при виконанні команди SLEEP. Таймер виробляє сигнал скидання. Вироблення таких скидань може бути заборонено шляхом запису нуля в спеціальний біт конфігурації  WDTE. Цю операцію проводять на етапі пропалення мікросхем.
Номінальна витримка WDT складає 18 мс (без використовування дільника). Вона залежить від температури, напруги живлення, особливостей типів мікросхем. Якщо потрібні великі затримки, то до WDT може бути підключений вбудований попередній подільник з коефіцієнтом поділу до 1:128, який програмується бітами PS2:PS0 в регістрі OPTION. В результаті можуть бути реалізовані витримки до 2,3 секунд.
Команди «CLRWDT» і «SLEEP» обнуляють WDT і попередній подільник, якщо він підключений до WDT. Це запускає витримку часу спочатку і запобігає на деякий час виробленню сигналу скидання. Якщо сигнал скидання від WDT все ж таки відбувся, то одночасно обнуляється біт /TO в регістрі статусу. В програмах з високим рівнем перешкод вміст регістра OPTION схильний до збою. Тому регістр OPTION повинен обновлятися через рівні проміжки часу.
Стан регістрів МК після скидання представлений в табл. 5.7.
Деякі із спеціальних регістрів при скиданні не ініціалізувалися. Вони мають випадковий стан при включенні живлення і не змінюються при інших видах скидання. Інша частина спеціальних регістрів ініціалізувалася в «стан скидання» при всіх видах скидання, окрім скидання по закінченню затримки таймера WDT в режимі SLEEP. Просто це скидання розглядається як тимчасова затримка в нормальній роботі. Є ще декілька виключень. Лічильник команд завжди скидається в нуль (0000h). Біти регістра статусу /TO і /PD встановлюються або скидаються залежно від варіанту скидання. Ці біти використовуються програмою для визначення природи скидання (див. Табл. 5.3).

Таблиця 5.7. Стан регістрів МК після скидання.                                  


Регістр

Адреса

Скидання по включенню

Інші види живлення скидання

W

-

xxxx xxxx

uuuu uuuu

INDF

00h

—— ——

—— ——

TMR0

01h

xxxx xxxx

uuuu uuuu

PCL

02h

0000 0000

0000 0000

STATUS

03h

0001 1xxx

000q quuu

FSR

04h

xxxx xxxx

uuuu uuuu

PORT A

05h

—x xxxx

—u uuuu

PORT B

06h

xxxx xxxx

uuuu uuuu

TRIS A

85h

—1 1111

—1 1111

TRIS B

86h

1111 1111

1111 1111

OPTION

81h

1111 1111

1111 1111

EEDATA

08h

xxxx xxxx

uuuu uuuu

EEADR

09h

xxxx xxxx

uuuu uuuu

EECON1

88h

—0 0000

—0 q000

EECON2

89h

—— ——

—— ——

PCLATH

0Ah

—0 0000

—0 0000

INTCON

0Bh

0000 000x

0000 000u

                   Тут: x - невідоме значення; u - незмінний біт; «-» - невживаний біт (читається як «0»); q - значення біта залежить від умов скидання.

Режим зниженого енергоспоживання SLEEP призначений для забезпечення дуже малого струму споживання в очікуванні (менше 1 мкА при вимкненому сторожовому таймері). Вихід з режиму SLEEP можливий по зовнішньому сигналу скидання або після закінчення витримки сторожового таймера.
Кристали PIC16F8X можуть працювати з чотирма типами вбудованих генераторів. Користувач може запрограмувати два конфігураційні біти (FOSC1 і FOSC0) для вибору одного з чотирьох режимів: RC, LP, XT, HS. Тут XT - стандартний кварцовий генератор, HS - високочастотний кварцовий генератор, LP - низькочастотний генератор для економічних програм. Мікроконтролери PIC16F8X можуть тактуватися і від зовнішніх джерел.
Генератор, побудований на кварцових або керамічних резонаторах, вимагає періоду стабілізації після включення живлення. Для цього вбудований таймер запуску генератора тримає пристрій в стані скидання приблизно 18 мс після того, як сигнал на /MCLR ніжці кристала досягне рівня логічної одиниці.
Можливість вибору типу генератора дозволяє ефективно використовувати мікроконтролери сімейства в різних програмах. Вживання RC  генератора дозволяє зменшити вартість системи, а низькочастотний LP-генератор скорочує енергоспоживання.
Програмний код, який записаний в кристал, може бути захищений від прочитування за допомогою установки біта захисту (CP) в слові конфігурації в нуль. Вміст програми не може бути прочитаний так, щоб з ним можна було працювати. Крім того, при встановленому біті захисту неможливо змінювати програму. Те ж відноситься і до вмісту пам'яті даних EEPROM.
Якщо встановлений захист, то біт CP можна стерти тільки разом з вмістом кристала. Спочатку буде стерта EEPROM програмна пам'ять і пам'ять даних, і в останню чергу - біт захисту коду CP. При прочитуванні захищеного кристала читання будь-якої адреси пам'яті дасть результат виду 0000000XXXXXXX(двійковий код), де X - це 0 або 1.
Пам'ять даних EEPROM неможливо перевірити після установки біта захисту.
Для вибору різних режимів роботи використовуються біти конфігурації. Мікроконтролери підгрупи PIC16F8X мають 5 або 6 біт конфігурації, які зберігаються в EEPROM і встановлюються на етапі програмування кристала. Ці біти можуть бути запрограмовані (читається як «0») або залишені незапрограмованими (читається «1») для вибору відповідного варіанту конфігурації пристрою. Вони розташовані в EEPROM-пам'яті за адресою 2007h. Користувачу слід пям'ятати, що ця адреса знаходиться нижче за область кодів і недоступна програмі.
Призначення біт конфігурації МК PIC16CR83 і PIC16CR84 приведено в табл. 5.8.
Таблиця 5.8. Призначення бітів конфігурації МК PIC16CR83 і PIC16CR84.
                                                                                  


R-u

R/P-u

R-u

R-u

R-u

R-u

R-u

CP

DP

CP

 /PWRTE

WDTE

FOSC1

FOSC0

Біт 13:8

Біт 7

Біт 6:4

Біт 3

Біт 2

Біт 1

Біт 0

біти 13:8 CP: біт захисту пам'яті програм
0 = пам'ять програм захищена
1 = захист відсутній

Біт 7 DP: біт захисту пам'яті даних
0 = пам'ять даних захищена
1 = захист відсутній

біти 6:4 CP: біт захисту пам'яті програм
0 = пам'ять програм захищена
1 = захист відсутній

Біт 3 /PWRTE: біт використовування таймера по включенню живлення
0 = таймер використовується (є затримка)
1 = таймер не  використовується

Біт 2: WDTE: біт використовування сторожового таймера 
0 = WDT не використовується
1 = WDT використовується

біти 1:0 FOSC1:FOSC0: біт вибору типу генератора 
11 = генератор RC 
10 = генератор
HS  01 = генератор
XT  00 = генератор LP

Тут: P - програмований біт; - n = значення по скиданню після включення живлення.

Призначення бітів конфігурації МК PIC16F83 і PIC16F84 приведено в табл. 5.9 .
Таблиця 5.9. Призначення біт конфігурації МК PIC15F83 і PIC16F84.


R-u

R-u

R-u

R-u

R-u

CP

/PWRTE

WDTE

FOSC1

FOSC0

Біт 13:4

Біт 3

Біт 2

Біт 1

Біт 0

біти 13:4 CP: біт захисту пам'яті програм
0 = пам'ять програм захищена
1 = захист відсутній

Біт 3 /PWRTE: біт використовування таймера по включенню живлення
0 = таймер використовується (є затримка)
1 = таймер не використовується

Біт 2: WDTE: біт використовування сторожового таймера 
0 = WDT не використовується
1 = WDT використовується

біти 1:0 FOSC1:FOSC0: біт вибору типу генератора 
11 = генератор RC 
10 = генератор HS 
01 = генератор XT 
00 = генератор LP

Чотири слова пам'яті, розташовані за адресами 2000h-2003h, призначено для зберігання ідентифікаційного коду (ID) користувача, контрольної суми або іншої інформації. Як і слово конфігурації, вони можуть бути прочитані або записані тільки за допомогою програматора. Доступу з програми до них немає.

             

Мікроконтролери підгрупи PIC16F8X можуть бути запрограмовані послідовним способом у складі пристрою. Для цього використовується всього п'ять ліній: дві для даних і тактового сигналу і три для землі, напруги живлення і програмуючої напруги. Розробник може створити і змакетувати пристрій з незапрограмованим приладом, а перед використовуванням ввести в нього програму.

 

 

попередня тема наступна тема